﻿using System;
using System.Web.Mvc;
using System.Collections.Generic;

namespace Caramel.Web.Mvc.Validation
{
	public abstract class ModelValidatorContainer
	{
		internal abstract IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes);

		//protected virtual void Apply(IModelMetadata metadata, ModelMetadata modelMetadata)
		//{
		//    if (metadata.AdditionalValues.WasUsed)
		//    {
		//        foreach (var pair in metadata.AdditionalValues.Value)
		//        {
		//            if (modelMetadata.AdditionalValues.ContainsKey(pair.Key))
		//            {
		//                modelMetadata.AdditionalValues[pair.Key] = pair.Value;
		//            }
		//            else
		//            {
		//                modelMetadata.AdditionalValues.Add(pair.Key, pair.Value);
		//            }
		//        }
		//    }

		//    modelMetadata.ConvertEmptyStringToNull = (metadata.ConvertEmptyStringToNull.WasUsed) ? metadata.ConvertEmptyStringToNull.Value : modelMetadata.ConvertEmptyStringToNull;
		//    modelMetadata.ConvertEmptyStringToNull = modelMetadata.ConvertEmptyStringToNull = (metadata.ConvertEmptyStringToNull.WasUsed) ? metadata.ConvertEmptyStringToNull.Value : modelMetadata.ConvertEmptyStringToNull;
		//    modelMetadata.DataTypeName = (metadata.DataTypeName.WasUsed) ? metadata.DataTypeName.Value : modelMetadata.DataTypeName;
		//    modelMetadata.Description = (metadata.Description.WasUsed) ? metadata.Description.Value : modelMetadata.Description;
		//    modelMetadata.DisplayFormatString = (metadata.DisplayFormatString.WasUsed) ? metadata.DisplayFormatString.Value : modelMetadata.DisplayFormatString;
		//    modelMetadata.DisplayName = (metadata.DisplayName.WasUsed) ? metadata.DisplayName.Value : modelMetadata.DisplayName;
		//    modelMetadata.EditFormatString = (metadata.EditFormatString.WasUsed) ? metadata.EditFormatString.Value : modelMetadata.EditFormatString;
		//    modelMetadata.HideSurroundingHtml = (metadata.HideSurroundingHtml.WasUsed) ? metadata.HideSurroundingHtml.Value : modelMetadata.HideSurroundingHtml;
		//    modelMetadata.IsReadOnly = (metadata.IsReadOnly.WasUsed) ? metadata.IsReadOnly.Value : modelMetadata.IsReadOnly;
		//    modelMetadata.IsRequired = (metadata.IsRequired.WasUsed) ? metadata.IsRequired.Value : modelMetadata.IsRequired;
		//    modelMetadata.NullDisplayText = (metadata.NullDisplayText.WasUsed) ? metadata.NullDisplayText.Value : modelMetadata.NullDisplayText;
		//    modelMetadata.Order = (metadata.Order.WasUsed) ? metadata.Order.Value : modelMetadata.Order;
		//    modelMetadata.ShortDisplayName = (metadata.ShortDisplayName.WasUsed) ? metadata.ShortDisplayName.Value : modelMetadata.ShortDisplayName;
		//    modelMetadata.ShowForDisplay = (metadata.ShowForDisplay.WasUsed) ? metadata.ShowForDisplay.Value : modelMetadata.ShowForDisplay;
		//    modelMetadata.ShowForEdit = (metadata.ShowForEdit.WasUsed) ? metadata.ShowForEdit.Value : modelMetadata.ShowForEdit;
		//    modelMetadata.SimpleDisplayText = (metadata.SimpleDisplayText.WasUsed) ? metadata.SimpleDisplayText.Value : modelMetadata.SimpleDisplayText;
		//    modelMetadata.TemplateHint = (metadata.TemplateHint.WasUsed) ? metadata.TemplateHint.Value : modelMetadata.TemplateHint;
		//    modelMetadata.Watermark = (metadata.Watermark.WasUsed) ? metadata.Watermark.Value : modelMetadata.Watermark;
		//}
	}
}
